package mobile

import (
	"fmt"
	"net"
	"strconv"
)

// PortRange 端口范围配置
type PortRange struct {
	Start int
	End   int
}

// DefaultPortRange 默认端口范围
var DefaultPortRange = PortRange{
	Start: 8553,
	End:   8600,
}

// IsPortAvailable 检查端口是否可用
func IsPortAvailable(port int) bool {
	ln, err := net.Listen("tcp", ":"+strconv.Itoa(port))
	if err != nil {
		return false
	}
	ln.Close()
	return true
}

// FindAvailablePort 在指定范围内查找可用端口
func FindAvailablePort(startPort, endPort int) (int, error) {
	for port := startPort; port <= endPort; port++ {
		if IsPortAvailable(port) {
			return port, nil
		}
	}
	return 0, fmt.Errorf("在端口范围 %d-%d 内没有找到可用端口", startPort, endPort)
}

// FindAvailablePortInRange 在默认范围内查找可用端口
func FindAvailablePortInRange() (int, error) {
	return FindAvailablePort(DefaultPortRange.Start, DefaultPortRange.End)
}

// GetPortStatus 获取端口状态信息
func GetPortStatus(port int) string {
	if IsPortAvailable(port) {
		return fmt.Sprintf("端口 %d 可用", port)
	}
	return fmt.Sprintf("端口 %d 已被占用", port)
}
